package rifl.meres4.commons.step;

import rifl.meres4.commons.model.Software;

/**
 * Common interface for workflow steps.
 * @author Mark Czotter
 *
 */
public interface IWorkflowStep {
	
	public Software doStep(Software software);
	
	public void put(Software software) throws InterruptedException;
	
	public Software get() throws InterruptedException;
	
	public void addNextStep(IWorkflowStep step);
	
	public void removeNextStep(IWorkflowStep step);
	
	public void addToInputQueue(Software software) throws InterruptedException;
	 
	public void registerMessageListener(MessageListener l);
	
	public void unregisterMessageListener(MessageListener l);
	
	public boolean hasInput();
	
	public boolean canDoStep();
	
}
